Conservative class preloading for real time java execution

ABSTRACT

A computer implemented method, a computer program product and a data processing system for executing an application written in a dynamic language are provided. An execution point of the application is loaded. A list of classes associated with the execution point is generated. The loading of each class in the list of classes is simulated. New execution points and new classes accessible from each execution point within each class in the list of classes are identified by recursively parsing instructions associated with each execution point. The list is modified to include the identified new execution points and new classes. Responsive to a determination that new execution points and new classes have been identified, the steps of identifying new execution points and new classes and modifying the list is repeated. The list is saved.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The present invention relates generally to a data processing system.More specifically, the present invention relates to a computerimplemented method, computer program product and data processing systemfor executing an application written in a dynamic language.

2. Description of the Related Art

The Internet is a global network of connected computer networks. Overthe last several years, the Internet has grown in significant measure. Alarge number of computers on the Internet provide information in variousforms. Anyone with a computer connected to the Internet can potentiallytap into this vast pool of information.

The most wide spread method of providing information over the Internetis via the World Wide Web (the Web). The Web consists of a subset of thecomputers connected to the Internet; the computers in this subset runHypertext Transfer Protocol (HTTP) servers (Web servers). Theinformation available via the Internet also encompasses informationavailable via other types of information servers such as GOPHER, WAIS,SMTP (simple mail transfer protocol), POPS (Post Office Protocol) andFTP (file transfer protocol).

Information on the Internet can be accessed through the use of a UniformResource Locator (URL). A Uniform Resource Locator (URL) uniquelyspecifies the location of a particular piece of information on theInternet.

Web servers host information in the form of Web pages; collectively theserver and the information hosted are referred to as a Web site. Asignificant number of Web pages are encoded using the Hypertext MarkupLanguage (HTML) although other encodings using the eXtensible MarkupLanguage (XML) or the Standard Generic Markup Language (SGML) arebecoming increasingly more common. The published specifications forthese languages are incorporated by reference herein. Web pages writtenin these formatting languages may include links to other Web pages onthe same Web site or another Web site. As will be known to those skilledin the art, Web pages may be generated dynamically by a server byintegrating a variety of elements into a formatted page prior totransmission to a Web client. Web servers, and information servers ofother types, await requests for the information from Internet clients.

Client software has evolved that allows users of computers connected tothe Internet to access this information. Advanced clients such asMicrosoft's Internet Explorer allow users to access software providedvia a variety of information servers in a unified client environment(Microsoft is a trademark of Microsoft Corporation in the United States,other countries, or both). Typically, such client software is referredto as browser software.

Client machines connected to the Internet run Web browsers whichgenerally operate by establishing a TCP/IP connection with a server Website and downloading files written in hyper-text mark-up language (HTML)from the Web site. Java™ enabled browsers running on conventional typepersonal computers include a Java Virtual Machine (JVM) in which Javabyte-code is executed within the browser (Java and all Java-basedtrademarks are trademarks of Sun Microsystems, Inc. in the UnitedStates, other countries, or both).

Java is an object-oriented programming language and environment focusingon defining data as objects and the methods that may be applied to thoseobjects. Java is designed to solve a number of problems in modernprogramming practice. Java is able to support applications for manytypes of data processing systems, which may contain a variety of centralprocessing units and operating system architectures. To enable a Javaapplication to execute on different types of data processing systems, acompiler typically generates an architecture-neutral file format, sothat the compiled code is executable on many processors, given thepresence of the Java runtime system. The Java compiler generates bytecode instructions that are non-specific to any particular computerarchitecture. A byte code is a machine independent code generated by theJava compiler and executed by a Java interpreter. A Java interpreter isa module that alternately decodes and executes a byte code. The decodingof the byte code places the instruction into an executable form for thecomputer on which the code is to be executed. Then, the instruction isexecuted by the computer. These byte code instructions are designed tobe easy to interpret on any machine and easily translated on the flyinto native machine code.

The Java Virtual Machine (JVM) is a virtual computer component. Avirtual computer component is an abstract computer component that onlyresides in memory. A JVM includes components necessary to run a programon a computer, including an interpreter. The JVM allows Java programs tobe executed on different platforms as opposed to only a single platform.Typically, computer programs are originally written in a human-readableformat called source code, which is then compiled (by a computer programcalled a “compiler”) into a format that can be directly implemented by acomputer system. Conventionally, programs must be compiled for onespecific platform (i.e. processing unit and operating systemcombination), such that a program that has been compiled for oneplatform will often not run on a different platform. Java programs arecompiled for the JVM, rather than for any particular platform (althoughthere are typically different versions of the JVM adapted to differentplatforms). In this manner, Java is able to support applications formany types of data processing systems, which may contain a variety ofcentral processing units and operating system architectures.

There are a number of approaches to dynamically loading interdependentcomponents of executable code (such as plug-ins, bundles, etc.) inmodern programming languages. Dynamically loading means to load one ormore components of an application after the application has begunexecution. In the Java programming language, classes are dynamicallyloaded using a class loader as an application program executes. Theclass loader is responsible for searching for a particular class, andmaking that class available to the run-time system if found. Inobject-oriented programming, a class consists of a collection of typesof encapsulated instance variables and types of methods, possibly withimplementation of those types, together with a constructor function thatcan be used to create objects of the class. Java class loading is basedon a delegation model, wherein a class loader first delegates the classloading responsibility to its immediate parent class loader.

There are a number of limitations inherent in this prior art classloading approach, however. Because the delegation model is linked toJava's single inheritance class structure, a class loader parent chainmust be able to load a complete Java type graph. A single inheritance isthe ability for a class, the derived class, to inherit from exactly oneclass, its base class. This necessarily limits subsystems to only oneprerequisite, and that prerequisite (and its ancestry) must be able tosupply all of the subsystem's ancestor classes, a complex composition ofprerequisite components cannot be supported under this approach. Inother words, the Java programmer needs to make sure that all typerelationships implied in the class implementation, including extendedclasses, implemented interfaces, declared data member types, argumenttypes of methods, return types of methods, and so forth, can be loadedby the single loader chain of the class. When dealing with complexfunctional relationships, the programmer typically addresses thisproblem by adding all the required archives, or “jar” files, on a singlelong class path. This is a less-than-optimal solution.

Furthermore, components, such as plug-ins, that require a considerableamount of resources, such as storage, to be allocated, take time to beinitialized, and will often trigger the loading of many classes onceinitialized, which consumes more resources and takes additional time.This approach results in an inefficient use of resources in many cases,and increases the start-up time and the memory footprint of the programin which the plug-in is contained. For example, it may happen that someclasses are not actually accessed until a relatively long time afteractivating the plug-in whose initialization triggered loading of theclass, and some may never be accessed. These inefficiencies becomeespecially significant in resource-constrained systems.

Other approaches to dynamic class loading, such as OSGi (“Open ServicesGateway Initiative”) bundles, use an independent class loader for eachcomponent, rather than using the delegation model. However, OSGi bundlesdo not address the limitations of dynamic class loaders which have beendiscussed. OSGi bundles continue to rely on parent relationships duringloading, and initialize upon start-up as well. The term “OSGi bundles”refers to components which adhere to the OSGi Service GatewaySpecification. OSGi bundles are archive files containing class files andresources. A manifest file of a bundle identifies the contents of thebundle and also the packages and services which are imported andexported by that bundle. More information on this specification may befound on the Internet at the OSGi Web site, www.osgi.org. The precedingreference to the OSGi Web site is provided for convenience only and doesnot in any manner serve as an endorsement by IBM of that Web site. Anyuse of that Web site may be subject to license conditions and is at yourown risk.

Real-time applications cannot tolerate the possibly large delays, on theorder of tens (10's) of milliseconds, that can occur if a code segment,for example a Java class, is lazily loaded. Lazily loaded means to delayloading one or more components of an application until the applicationrequires it for execution. Today, there are several options availablethat are less-than-optimal. One solution is for the user to manage alist of classes themselves and manually load them. Many users do this,but this approach is susceptible to user error. Another approach is forthe user to write a simple routine to pre-load all classes in a jarfile. This solution loads far more than is necessary. If users want tocompile methods of a class at load time, this approach contains too muchdata and takes a significant amount of time and also uses a significantamount of memory to hold classes that will likely not be referenced.There is also the possibility, as with the first option, that the listof jar files is incomplete. A third solution is to perform a wholeprogram analysis and require that classes can not be dynamically loaded.This solution requires that the program code be a subset of the Javalanguage and this can not be enforced at runtime without restricting thelanguage.

Accordingly, what is needed is an improved technique for dynamicallyloading independent components referenced code written in a dynamiclanguage at the start of execution instead of lazily, for moredeterministic execution time of real-time applications. Independentcomponents are those components whose classes are not necessarilylocated within a single functional dependence hierarchy.

BRIEF SUMMARY OF THE INVENTION

Exemplary embodiments describe a computer implemented method, a computerprogram product and a data processing system for executing anapplication written in a dynamic language. An execution point of theapplication is loaded. A list of classes associated with the executionpoint is generated. New execution points and new classes accessible fromeach execution point within each class in the list of classes areidentified by recursively parsing instructions associated with eachexecution point. The list is modified to include the identified newexecution points and new classes. Responsive to a determination that newexecution points and new classes have been identified, the steps ofidentifying new execution points and new classes and modifying the listis repeated. The list is saved.

Another exemplary embodiment provides that in response to adetermination that no new execution points and new classes have beenidentified, each class in the list of classes is loaded.

Another exemplary embodiment provides that the list includes at leastone package private class being within a package.

Another exemplary embodiment provides that modifying the list to includethe identified package private class further comprises extending thepackage private class to create a new public class within the package.

Another exemplary embodiment provides that the new public class has aunique name referring to the package private class and that the newpublic class has a public constructor that accepts no parameters.

Another exemplary embodiment provides that in response to adetermination that instructions associated with each execution pointcannot be recursively parsed, a proxy that defines what classes andexecution points are accessible through the execution point is provided.

Exemplary embodiments describe a computer implemented method, a computerprogram product and a data processing system for facilitating loading ofa package private class for integration into code to be executed by acomputer system, the package private class being within a package. Thepackage private class is extended to create a new public class withinthe package, wherein the new public class has a unique name referring tothe package private class and wherein the new public class has a publicconstructor that accepts no parameters. The new public class is saved inmachine-readable storage.

BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS

The novel features believed characteristic of the invention are setforth in the appended claims. The invention itself, however, as well asa preferred mode of use, further objectives and advantages thereof, willbest be understood by reference to the following detailed description ofan illustrative embodiment when read in conjunction with theaccompanying drawings, wherein:

FIG. 1 is a pictorial representation of a network of data processingsystems in which exemplary aspects may be implemented;

FIG. 2 is a block diagram of a data processing system in which exemplaryaspects may be implemented;

FIG. 3 is a block diagram of components for executing an applicationwritten in a dynamic language in accordance with an exemplaryembodiment;

FIG. 4 is a flowchart illustrating the operation of executing anapplication written in a dynamic language in accordance with anexemplary embodiment; and

FIG. 5 is a flowchart illustrating the operation of preloading andverifying package private classes in accordance with an exemplaryembodiment.

DETAILED DESCRIPTION OF THE INVENTION

FIGS. 1-2 are provided as exemplary diagrams of data processingenvironments in which embodiments may be implemented. It should beappreciated that FIGS. 1-2 are only exemplary and are not intended toassert or imply any limitation with regard to the environments in whichaspects or embodiments may be implemented. Many modifications to thedepicted environments may be made without departing from the spirit andscope of the present invention.

With reference now to the figures, FIG. 1 depicts a pictorialrepresentation of a network of data processing systems in which aspectsof the present invention may be implemented. Network data processingsystem 100 is a network of computers in which exemplary embodiments maybe implemented. Network data processing system 100 contains network 102,which is the medium used to provide communications links between variousdevices and computers connected together within network data processingsystem 100. Network 102 may include connections, such as wire, wirelesscommunication links, or fiber optic cables.

In the depicted example, server 104 and server 106 connect to network102 along with storage unit 108. In addition, clients 110, 112, and 114connect to network 102. These clients 110, 112, and 114 may be, forexample, personal computers or network computers. In the depictedexample, server 104 provides data, such as boot files, operating systemimages, and applications to clients 110, 112, and 114. Clients 110, 112,and 114 are clients to server 104 in this example. Network dataprocessing system 100 may include additional servers, clients, and otherdevices not shown.

In the depicted example, network data processing system 100 is theInternet with network 102 representing a worldwide collection ofnetworks and gateways that use the Transmission ControlProtocol/Internet Protocol (TCP/IP) suite of protocols to communicatewith one another. At the heart of the Internet is a backbone ofhigh-speed data communication lines between major nodes or hostcomputers, consisting of thousands of commercial, government,educational and other computer systems that route data and messages. Ofcourse, network data processing system 100 also may be implemented as anumber of different types of networks, such as for example, an intranet,a local area network (LAN), or a wide area network (WAN). FIG. 1 isintended as an example, and not as an architectural limitation fordifferent embodiments.

With reference now to FIG. 2, a block diagram of a data processingsystem is shown in which aspects of the present invention may beimplemented. Data processing system 200 is an example of a computer,such as server 104 or client 110 in FIG. 1, in which computer usablecode or instructions implementing the processes for embodiments may belocated.

In the depicted example, data processing system 200 employs a hubarchitecture including north bridge and memory controller hub (NB/MCH)202 and south bridge and input/output (I/O) controller hub (ICH) 204.Processing unit 206, main memory 208, and graphics processor 210 areconnected to north bridge and memory controller hub 202. Graphicsprocessor 210 may be connected to north bridge and memory controller hub202 through an accelerated graphics port (AGP).

In the depicted example, local area network (LAN) adapter 212 connectsto south bridge and I/O controller hub 204. Audio adapter 216, keyboardand mouse adapter 220, modem 222, read only memory (ROM) 224, hard diskdrive (HDD) 226, CD-ROM drive 230, universal serial bus (USB) ports andother communications ports 232, and PCI/PCIe devices 234 connect tosouth bridge and I/O controller hub 204 through bus 238 and bus 240.PCI/PCIe devices may include, for example, Ethernet adapters, add-incards and PC cards for notebook computers. PCI uses a card buscontroller, while PCIe does not. ROM 224 may be, for example, a flashbinary input/output system (BIOS).

Hard disk drive 226 and CD-ROM drive 230 connect to south bridge and I/Ocontroller hub 204 through bus 240. Hard disk drive 226 and CD-ROM drive230 may use, for example, an integrated drive electronics (IDE) orserial advanced technology attachment (SATA) interface. Super I/O (SIO)device 236 may be connected to south bridge and I/O controller hub 204.

An operating system runs on processing unit 206 and coordinates andprovides control of various components within data processing system 200in FIG. 2. As a client, the operating system may be a commerciallyavailable operating system such as Microsoft® Windows® XP (Microsoft andWindows are trademarks of Microsoft Corporation in the United States,other countries, or both). An object-oriented programming system, suchas the Java programming system, may run in conjunction with theoperating system and provide calls to the operating system from Javaprograms or applications executing on data processing system 200.

As a server, data processing system 200 may be, for example, an IBMeServer™ pSeries® computer system, running the Advanced InteractiveExecutive (AIX®) operating system or LINUX operating system (eServer,pSeries and AIX are trademarks of International Business MachinesCorporation in the United States, other countries, or both while Linuxis a trademark of Linus Torvalds in the United States, other countries,or both). Data processing system 200 may be a symmetric multiprocessor(SMP) system including a plurality of processors in processing unit 206.Alternatively, a single processor system may be employed.

Instructions for the operating system, the object-oriented programmingsystem, and applications or programs are located on storage devices,such as hard disk drive 226, and may be loaded into main memory 208 forexecution by processing unit 206. The processes for embodiments areperformed by processing unit 206 using computer usable program code,which may be located in a memory such as, for example, main memory 208,read only memory 224, or in one or more peripheral devices 226 and 230.

Those of ordinary skill in the art will appreciate that the hardware inFIGS. 1-2 may vary depending on the implementation. Other internalhardware or peripheral devices, such as flash memory, equivalentnon-volatile memory, or optical disk drives and the like, may be used inaddition to or in place of the hardware depicted in FIGS. 1-2. Also, theprocesses may be applied to a multiprocessor data processing system.

In some illustrative examples, data processing system 200 may be apersonal digital assistant (PDA), which is configured with flash memoryto provide non-volatile memory for storing operating system files and/oruser-generated data.

A bus system may be comprised of one or more buses, such as bus 238 orbus 240 as shown in FIG. 2. Of course the bus system may be implementedusing any type of communications fabric or architecture that providesfor a transfer of data between different components or devices attachedto the fabric or architecture. A communications unit may include one ormore devices used to transmit and receive data, such as modem 222 ornetwork adapter 212 of FIG. 2. A memory may be, for example, main memory208, read only memory 224, or a cache such as found in north bridge andmemory controller hub 202 in FIG. 2. The depicted examples in FIGS. 1-2and above-described examples are not meant to imply architecturallimitations. For example, data processing system 200 also may be atablet computer, laptop computer, or telephone device in addition totaking the form of a PDA.

In an exemplary embodiment, an application written in a dynamic languageis scanned, starting at an execution point of the application. A dynamiclanguage is a computer language that provides mechanisms to load newprogram components for use by the application during execution of theapplication. An execution point is a location in an application. Anapplication is a computer program that performs a well defined action orset of actions. A method is an execution point in an application thathas a name and may be called directly, or indirectly, in the applicationencoding.

The scanning reveals other execution points and applications that may bereached by the application. The scanning is repeated until a list of allreachable applications and execution points is obtained. Reachable meansthat either a direct or indirect reference is made between twoapplications or executions points. For example, a first method isreachable from a second method if there is either a direct or indirectreference from the first method to the second method. Since theapplication is written in a dynamic language, one difficulty isefficiently determining what virtual method may be reached, whichrequires a conservative approach to tracking the virtual dispatchtarget. A virtual method is a method that overrides the general methoddefinition for an object. For example, the drive( ) method of a Porscheobject is the virtual method of the more general drive( ) method of aCar object. A conservative approach is an approach that will provide aresult list that is correct, but possibly not the smallest result list.A virtual dispatch target is the actual method that is executed on avirtual method call.

Once a list of reachable methods is determined, the list can be used ineither a static approach or a dynamic approach. The static approach isto generate source code that the user builds into their application aspart of the deployment step. The dynamic approach is to generate thelist at startup of the application and then aggressively pre-load, andoptionally compile, the code. For applications that cannot afford thetime to do the analysis at runtime, using the static approach togenerate the method at deployment would usually be the best option.Whereas, for applications that run a long time and can afford the timeto calculate the result at runtime, the dynamic approach makes moresense, as the application can just directly make the call.

An advantage of exemplary embodiments over previous solutions is thatthe exemplary embodiments can be run as part of the deployment orruntime process and therefore, are less prone to error. Also, exemplaryembodiments do not require as many classes to be loaded as the simplesolution, that just loads all classes in all jar files, requires.Furthermore, implementations of exemplary embodiments can be fullyconformant to the Java specification.

Exemplary embodiments provide other advantages as well. The compilationof the method can be delayed until runtime, enabling a just-in-time(JIT) compiler to potentially generate better code than Java conformantahead-of-time compilers. A just-in-time (JIT) compiler is a compilerthat translates a high-level language representation of a method ormethods to machine instructions during execution of the applicationitself. An ahead-of-time compiler is a compiler that translates ahigh-level language representation of a method or methods to machineinstructions before execution of the application itself.

Also, the generated code can be analyzed more completely to determine ifclass initialization can also be run on classes when they are loaded.Normally, this type of analysis cannot be performed because runningclass initializers in the wrong order could cause the program to fail orrun incorrectly. A class initializer is a method that, when executed,initializes the data associated with a class to a well defined set ofcorresponding values. But, for class initializers that do not have anyadverse side effects outside of their class, they can be run safely inany order. Class initializers that do have side effects may be flaggedto the developer, since this is likely undesired behavior for a classused in real-time execution.

An exemplary embodiment provides for enabling a real-time application topre-load and verify package private classes at application startupthrough a general call to the service. A package is a named set of Javaclasses. Classes in the same package can reference data and methods thatare marked as package private and which therefore can not be accessed byclasses outside this package. A package private is data and methods thatare only accessible from classes in the same named package. Verifyingrefers to a step in the process of loading a class, where the data andcode of the class are deemed valid for subsequent execution in theapplication.

At present, known implementations can load package private classes fromdisk at startup, but the known implementations cannot verify thesepackage private classes. Thus, verification is delayed until the firstreference to the inner class by a class in the same package referencingthe package private class. This means that real-time applicationprogrammers must either not use package private classes, which may notbe an option, since real-time class libraries like Javolution use themextensively, or they must manually “warm up” their code by calling thekey code paths at startup, which is error prone and complicated. To“warm up” code means to repeatedly execute an execution point to ensurethat class loading, verification and just-in-time compilation have beenperformed for the associated code.

Thus, an exemplary embodiment provides for running a tool across the setof classes being pre-loaded by the application, and generating newclasses that reference the package private classes. Because of the waythese new classes are designed, the loading of these new classes willcause the referenced package private classes to be loaded and verified,instead of just being loaded. This results in verification beingperformed at startup instead of during execution of the real-time code.

An exemplary embodiment provides for generating classes that arestructured to enable the package private classes to be loaded andverified. Package private classes use the notion of package private as away to shield a general programmer from accessing data in an object ofthe class. This means that if general code tries to load a packageprivate class directly, the load will succeed, but the class can not beinstantiated through ClassLoader.newInstance( ) because the class ispackage private. Instantiate means to allocate and initialize an objectof a given class for subsequent use. Exemplary embodiments solve thisproblem by performing the following steps:

-   -   1) interrogate a package Pj of a package private class Ca,        deriving a unique new class name in that package (call this        class Gi).    -   2) generate the following sequence for this class Pj.Gi:    -   public class Pj.Gi extends Pj.Ca    -   {    -   public Pj.Gi( )    -   Code:    -   <some code>    -   }    -   3) write this class Pj.Gi to a directory on the class path.    -   4) load the class Pj.Gi (but do not instantiate it) with the        standard class loader.

Therefore, the class Pj.Gi can be loaded and verified because it isdefined as a public class. Because the class Pj.Gi extends the packageprivate class Pj.Ca, the loading and verification of this manufacturedclass will also cause the underlying package private class to be loadedand verified. Additionally, as shown in the example above, the newpublic class has a public constructor that accepts no parameters.

Exemplary embodiments may be used in two ways. The first way would be togenerate the new classes into a jar file as part of a deployment step,then to pre-load the new jar file when running the application. This hasthe advantage of not requiring a writable class path at runtime, whichmay cause security concerns in some environments. The second approach isto issue all the steps at startup of the application, writing theclasses to a well-known directory, then loading those classes from thatdirectory. This approach has the advantage of requiring fewer steps inthe deployment process at the expense of requiring a writable classpath.

Turning back to the figures, FIG. 3 is a block diagram of components forexecuting an application written in a dynamic language in accordancewith an exemplary embodiment. Application 302 is implemented on a dataprocessing system, such as data processing system 200 in FIG. 2.Application 302 and class analysis engine 304 may be implemented on thesame data processing system or on separate data processing systems.

Application 302 sends class file 306 to class analysis engine 304. Classfile 306 is a list of all classes that are available to be used byapplication 302. Class analysis engine 304 analyses class file 306 anddetermines conservative class file 308, which class analysis engine 304returns to application 302. Conservative class file 308 is“conservative” in that the list of classes contained in the file islarger than necessary and therefore conservative. That is, not everyclass contained within the file may actually be targeted by theapplication, but the list of classes contained in the file will be asuperset of the actual targets. Conservative class file 308 comprises alist of classes that are “root” classes and the execution points ofapplication 302. Conservative class file 308 is parsed by an exemplaryembodiment in order to execute an application written in a dynamiclanguage, as further described in FIG. 4.

FIG. 4 is a flowchart illustrating the operation of executing anapplication written in a dynamic language in accordance with anexemplary embodiment. The operation of FIG. 4 may be implemented by aclass analysis engine, such as class analysis engine 304 in FIG. 3. Theoperation begins when a list of methods and classes, such as class file306 in FIG. 3, is received (step 402). The operation initializes themethods and unloaded classes contained in the list of classes (step404). Initialize means to provide initial values to a list of variables.Next, the operation simulates loading all classes on the list of classesand removes the classes from the list of classes (step 406). Thissimulated class loading is done in a batch fashion. Executing a seriesof non-interactive jobs simultaneously is batch processing. Each jarfile is loaded once, reading all the classes on the class list from thejar file in one pass, reducing the I/O required for the simulated classloading. The operation scans the methods on the method list (step 408).This scanning process will find new methods and new classes. Theoperation determines if any new methods or classes have been found (step410). If the operation determines that new methods or classes have beenfound (a yes output to step 410), the operation adds the new methods tothe method list and the new classes to the class list (step 412). Thenrepeat step 408.

If the operation determines that no new methods or classes have beenfound (a no output to step 410), for all methods in classes that arealready found, the operation scans their byte code (step 414). Thisscanning will reveal virtual methods and interfaces possibly accessed bythe application. A virtual method is a method that overrides the generalmethod definition for an object. For example, the drive( ) method of aPorsche object is the virtual method of the more general drive( ) methodof a Car object. An interface is a set of methods that must beimplemented by a class in order for the class to claim it hasimplemented the interface. The operation determines if the class is apackage private class (step 430). If the operation determines that theclass is a package private class (a yes output to step 430), theoperation generates a new public class for the package private class(step 432) and proceeds to step 416. If the operation determines thatthe class is not a package private class (a no output to step 430), theoperation determines if any static method byte codes have beenidentified (step 416). A static method is a method associated with aclass. Therefore a static method is not a virtual method. Byte code isthe portable set of instructions that define a component of a dynamiclanguage. In the present exemplary embodiment, the byte code defines acomponent in a Java application. If the operation determines that staticmethod byte codes have been identified (a yes output to step 416), theoperation adds these static method byte codes to the method and classlists respectively (step 418) and repeats step 408.

If the operation determines that no new static method byte codes havebeen identified (a no output to step 416), the operation determines ifany virtual methods or interfaces have been identified (step 420). Ifthe operation determines that no new virtual methods or interfaces havebeen identified (a no output to step 420), the list, referred to as aconservative class list, is recorded (step 428) and the operation ends.While the present exemplary embodiment is described in terms of savingthe conservative class list once no new execution points or classes areidentified, it should be noted that in various implementations, the listmay be saved each time the list is modified or the list may be savedperiodically, based on a selected time frame. Furthermore, in otherexemplary embodiments the conservative class list may be saved accordingto any combination of the above described methods or similar methods.

If the operation determines that new virtual methods or interfaces havebeen identified (a yes output to step 420), the operation records thevirtual methods or interfaces (step 422). For all virtual methods andinterfaces discovered the operation builds a class hierarchy of thecurrently loaded classes to provide a mapping from a method to the setof classes the method could target (step 424). A class hierarchy is adescription of how the classes within a list of classes are related toone another. This list may be larger than on previous iterations sincethe previous inner loop may have loaded new classes that can be newtargets of the virtual method dispatches. This list is conservative, notall classes within the list may be targeted, but the list will be asuperset of the actual targets. For each virtual method, the operationassumes all dispatch targets to be valid and adds these methods to themethod list (step 426) and returns to step 408.

There are areas where exemplary embodiments may fail. However, theexemplary embodiment can detect the causes of failure before they occurand thus alert the operator. One such case is if alternate class loadersare used. This can be detected because references to these class loaderswill be discovered. Another failure can occur with reflection, where aclass or method is manufactured as part of program execution. Reflectionrefers to the capability of an application to determine the definitionof the classes in the application itself. Again, references to thesemethods, which are restricted to the core Java Runtime Environment(JRE), can be discovered at analysis time. Finally, calls to Java NativeInterface (JNI) routines (non-Java code) can not be analyzed. JavaNative Interface (JNI) routines are routines not written in Java, but insome other language, typically C. In this case, the user can provideproxy classes so that the conservative approach knows what isreferenced. For the JRE core classes, these proxy classes have beencreated as required. JRE core classes are those classes defined in thepackages java.lang, java.io, java.net, and java.util. Again, unknown JNImethod calls can be detected and reported.

FIG. 5 is flowchart illustrating the operation of preloading andverifying package private classes in accordance with an exemplaryembodiment. The operation of FIG. 5 may be implemented by a classanalysis engine, such as class analysis engine 304 in FIG. 3. FIG. 5 isa more detailed illustration of step 432 in FIG. 4, when the class inquestion is a package private class. The operation begins byinterrogating the package of the package private class to derive aunique new class name in that package (step 502). Next, the operationgenerates the appropriate public class sequence for the package privateclass (step 504). The operation writes the new public class to adirectory on the class list (step 506) and the operation ends.

In one exemplary embodiment, the operation of preloading and verifyingpackage private classes is performed at the time analysis of the classis performed. In another exemplary embodiment, instead of preloading andverifying package private classes at step 430 in FIG. 4, the class isinstead added to a list and then, once it has been determined that nonew classes are left to be discovered, this list is walked and the newclasses are generated and added to the conservative class list.

Thus, exemplary embodiments provide for executing an application writtenin a dynamic language. In an exemplary embodiment, an applicationwritten in a dynamic language is scanned, starting at an execution pointof the application. The scanning reveals other execution points andapplications that may be reached by the application. The scanning isrepeated until a list of all reachable applications and execution pointsis obtained.

The invention can take the form of an entirely software embodiment or anembodiment containing both hardware and software elements. In apreferred embodiment, the invention is implemented in software, whichincludes but is not limited to firmware, resident software, microcode,etc.

Furthermore, the invention can take the form of a computer programproduct accessible from a computer-usable or computer-readable mediumproviding program code for use by or in connection with a computer orany instruction execution system. For the purposes of this description,a computer-usable or computer readable medium can be any tangibleapparatus that can contain, store, communicate, propagate, or transportthe program for use by or in connection with the instruction executionsystem, apparatus, or device.

The medium can be an electronic, magnetic, optical, electromagnetic,infrared, or semiconductor system (or apparatus or device) or apropagation medium. Examples of a computer-readable medium include asemiconductor or solid state memory, magnetic tape, a removable computerdiskette, a random access memory (RAM), a read-only memory (ROM), arigid magnetic disk and an optical disk. Current examples of opticaldisks include compact disk-read only memory (CD-ROM), compactdisk-read/write (CD-R/W) and DVD.

A data processing system suitable for storing and/or executing programcode will include at least one processor coupled directly or indirectlyto memory elements through a system bus. The memory elements can includelocal memory employed during actual execution of the program code, bulkstorage, and cache memories which provide temporary storage of at leastsome program code in order to reduce the number of times code must beretrieved from bulk storage during execution.

Input/output or I/O devices (including but not limited to keyboards,displays, pointing devices, etc.) can be coupled to the system eitherdirectly or through intervening I/O controllers.

Network adapters may also be coupled to the system to enable the dataprocessing system to become coupled to other data processing systems orremote printers or storage devices through intervening private or publicnetworks. Modems, cable modem and Ethernet cards are just a few of thecurrently available types of network adapters.

The description of the present invention has been presented for purposesof illustration and description, and is not intended to be exhaustive orlimited to the invention in the form disclosed. Many modifications andvariations will be apparent to those of ordinary skill in the art. Theembodiment was chosen and described in order to best explain theprinciples of the invention, the practical application, and to enableothers of ordinary skill in the art to understand the invention forvarious embodiments with various modifications as are suited to theparticular use contemplated.

What is claimed is:
 1. A computer-implemented method, comprising:receiving, from an application, a jar file having a class file includinga list of methods and classes, the list of methods and classes includinga method list and a class list; loading, in a batch, all the classes inthe list of methods and classes; performing first loop operations of afirst loop until no new methods and classes are found in the list ofmethods and classes, the first loop operations including: scanning eachmethod within the method list to identify new method(s) and/or class(es)therefrom, and adding the identified new method(s) and/or class(es) tothe list of methods and classes; performing second loop operations of asecond loop until no new static method byte codes are identified, thesecond loop operations including: adding identified new static methodbyte codes to the list of methods and classes, executing the first loop,and scanning byte code of all the methods in the method list to identifyany virtual method(s) and/or interface(s) accessed by the application;performing third loop operations of a third loop until no new virtualmethod(s) and/or interface(s) are identified, the third loop operationsincluding: building, for each of the new identified virtual method(s)and/or interface(s), a class hierarchy describing how the classes withinthe list of classes are related to one another, adding, for each of thenew identified virtual method(s), all dispatch targets to the methodlist, and executing the second loop; recording, as a conservative classlist, the modified class list; and forwarding, to the application, theconservative class list.
 2. The method of claim 1, wherein the secondloop operations include: identifying a class as a package private class;and generating, based upon the package private class being identified, anew public class for the package private class.
 3. The method of claim2, wherein the generating includes interrogating a package of thepackage private class to derive a unique new class name in the package;creating a public class sequence for the package private class; writingthe new public class to a directory in the class list.
 4. The method ofclaim 3, wherein the new public class is not instantiated.
 5. The methodof claim 3, wherein the new public class has a public constructor thataccepts no parameters.
 6. The method of claim 1, wherein theconservative class list is recorded each time the class list ismodified.
 7. A computer hardware system, comprising: a hardwareprocessor; and a computer hardware memory having stored thereininstructions executable by the hardware processor, the instructionsincluding: receiving, from an application, a jar file having a classfile including a list of methods and classes, the list of methods andclasses including a method list and a class list; loading, in a batch,all the classes in the list of methods and classes; performing firstloop operations of a first loop until no new methods and classes arefound in the list of methods and classes, the first loop operationsincluding: scanning each method within the method list to identify newmethod(s) and/or class(es) therefrom, and adding the identified newmethod(s) and/or class(es) to the list of methods and classes;performing second loop operations of a second loop until no new staticmethod byte codes are identified, the second loop operations including:adding identified new static method byte codes to the list of methodsand classes, executing the first loop, and scanning byte code of all themethods in the method list to identify any virtual method(s) and/orinterface(s) accessed by the application; performing third loopoperations of a third loop until no new virtual method(s) and/orinterface(s) are identified, the third loop operations including:building, for each of the new identified virtual method(s) and/orinterface(s), a class hierarchy describing how the classes within thelist of classes are related to one another, adding, for each of the newidentified virtual method(s), all dispatch targets to the method list,and executing the second loop; recording, as a conservative class list,the modified class list; and forwarding, to the application, theconservative class list.
 8. The system of claim 7, wherein the secondloop operations include: identifying a class as a package private class;and generating, based upon the package private class being identified, anew public class for the package private class.
 9. The system of claim8, wherein the generating includes interrogating a package of thepackage private class to derive a unique new class name in the package;creating a public class sequence for the package private class; writingthe new public class to a directory in the class list.
 10. The system ofclaim 9, wherein the new public class is not instantiated.
 11. Thesystem of claim 9, wherein the new public class has a public constructorthat accepts no parameters.
 12. The system of claim 7, wherein theconservative class list is recorded each time the class list ismodified.
 13. A computer program product, comprising, a hardware storagedevice having stored therein computer instructions, the computerinstructions, when executed by a computer hardware system, causes thecomputer hardware system to perform: receiving, from an application, ajar file having a class file including a list of methods and classes,the list of methods and classes including a method list and a classlist; loading, in a batch, all the classes in the list of methods andclasses; performing first loop operations of a first loop until no newmethods and classes are found in the list of methods and classes, thefirst loop operations including: scanning each method within the methodlist to identify new method(s) and/or class(es) therefrom, and addingthe identified new method(s) and/or class(es) to the list of methods andclasses; performing second loop operations of a second loop until no newstatic method byte codes are identified, the second loop operationsincluding: adding identified new static method byte codes to the list ofmethods and classes, executing the first loop, and scanning byte code ofall the methods in the method list to identify any virtual method(s)and/or interface(s) accessed by the application; performing third loopoperations of a third loop until no new virtual method(s) and/orinterface(s) are identified, the third loop operations including:building, for each of the new identified virtual method(s) and/orinterface(s), a class hierarchy describing how the classes within thelist of classes are related to one another, adding, for each of the newidentified virtual method(s), all dispatch targets to the method list,and executing the second loop; recording, as a conservative class list,the modified class list; and forwarding, to the application, theconservative class list.
 14. The computer program product of claim 13,wherein the second loop operations include: identifying a class as apackage private class; and generating, based upon the package privateclass being identified, a new public class for the package privateclass.
 15. The computer program product of claim 14, wherein thegenerating includes interrogating a package of the package private classto derive a unique new class name in the package; creating a publicclass sequence for the package private class; writing the new publicclass to a directory in the class list.
 16. The computer program productof claim 15, wherein the new public class is not instantiated.
 17. Thecomputer program product of claim 15, wherein the new public class has apublic constructor that accepts no parameters.
 18. The computer programproduct of claim 13, wherein the conservative class list is recordedeach time the class list is modified.